package jdk7.others;

import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardWatchEventKinds;
import java.nio.file.WatchEvent;
import java.nio.file.WatchKey;
import java.nio.file.WatchService;

/**
 *	在前面的Java版本中，如果想监控某个文件的变化，需要启动一个后台进程，
 *	每隔一段时间去遍历指定的目录，如果结果和上次的不同则认为发生了变化。
 *	而WatchService在这方面有更好的性能，但是需要结合Path类的register方
 *	法来使用。register方法的第一个参数需要制定一个WatchService来进行监
 *	听，后面为可选参数，指定的是需要监听哪些事件。
 */

public class TestWatchService {
	public void calculate() throws IOException, InterruptedException {
		WatchService service = FileSystems.getDefault().newWatchService();
		Path path = Paths.get("").toAbsolutePath();
		path.register(service, StandardWatchEventKinds.ENTRY_CREATE);
		while (true) {
			WatchKey key = service.take();
			for (WatchEvent<?> event : key.pollEvents()) {
				Path createdPath = (Path) event.context();
				createdPath = path.resolve(createdPath);
				long size = Files.size(createdPath);
				System.out.println(createdPath + " ==> " + size);
			}
			key.reset();
		}
	}

	/**
	 * @param args the command line arguments
	 */
	public static void main(String[] args) throws Throwable {
		TestWatchService wc = new TestWatchService();
		wc.calculate();
	}
}
